
import bpy

import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类
import 全局控制.Node.插座.bl_插座基类 as 插件基类
import Core.bl_渲染层 as 渲染层

import engine.initLIB.load_dll as engineLib
import ctypes







def f_代码头置入_文本物体(self, context):
	代码头 = '# <坐标取物体> &参数:objs, 坐标:coord, 返回值:data'
	self.m_Code.lines[0].body = 代码头

class C_SceneNode_文本物体(基类.C_SN_基类):
	bl_dname = 'bl_node_文本物体'
	bl_label = '文本物体'
	
	m_文本框文本 = bpy.props.StringProperty(default='文本框文本')
	m_Code = bpy.props.PointerProperty(type=bpy.types.Text, update=f_代码头置入_文本物体)

	def init(self, context):
		super(C_SceneNode_文本物体, self).f_init(context)
		
		self.inputs.new('C_NodeSocket_物体集合', name='集合')
		self.outputs.new('C_NodeSocket_物体', name='文字物体')
		

	def draw_buttons(self, context, layout):
		if self.m_Code != None :
			layout.prop(self, "m_文本框文本")
		layout.prop(self, "m_Code")
	

	def f_update(self, 是否向下传递=False, input插座=None):
		渲染层容器 = self.inputs['集合'].f_getData()
		print('渲染层容器 = ', 渲染层容器)
		if 渲染层容器 == None:
			return False
		
		name = '文本物体_' + 渲染层容器.name
		mesh = bpy.data.curves.new(name=name, type='FONT')
		new_object = bpy.data.objects.new(name=name, object_data=mesh)
		
		mesh.body = self.m_文本框文本
		#new_object.location = 源.location
		#new_object.rotation_euler = 源.rotation_euler
		#new_object.scale = 源.scale

		渲染层容器.objects.link(new_object)
		#print('new_object = ', new_object)
		data.append(new_object)
		
		super(C_SceneNode_文本物体, self).f_update(是否向下传递, input插座)
		
		
class C_NODE_AddMenu_文本物体(bpy.types.Operator):
	bl_idname = 'node.global_node_object_text'
	bl_label = '文本物体'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		operator.use_transform = True
		bpy.ops.node.add_node(type='C_SceneNode_文本物体', use_transform=True)
		return {'FINISHED'}










def f_序列名称_update(self, context):
	data = (list(self.m_路径文本), list(self.m_文件名称前), list(self.m_文件名称后))
	engineLib.flexCAPI.f_node_传入BL数据(ctypes.c_wchar_p(self.id_data.name), ctypes.c_wchar_p(self.name), ctypes.py_object(data));
	#print('f_序列名称_update = ', data)
class C_Node_序列名称(基类.C_Node_基类):
	bl_dname = 'bl_node_文本物体'
	bl_label = '文本物体'
	
	m_路径文本 = bpy.props.StringProperty(subtype='DIR_PATH', update=f_序列名称_update)
	m_文件名称前 = bpy.props.StringProperty(update=f_序列名称_update)
	m_文件名称后 = bpy.props.StringProperty(update=f_序列名称_update)
	#m_Code = bpy.props.PointerProperty(type=bpy.types.Text, update=f_代码头置入_文本物体)

	def init(self, context):
		super(C_Node_序列名称, self).f_init(context)
		self.inputs.new('C_Socket_I32', name='编号')
		self.outputs.new('C_Socket_文本', name='路径')
		
	def draw_buttons(self, context, layout):
		layout.prop(self, "m_路径文本")
		co = layout.row()
		co.prop(self, "m_文件名称前", text='')
		co.prop(self, "m_文件名称后", text='#')
		
	def f_toCPP(self):
		engineLib.flexCAPI.f_创建名称序列节点(ctypes.c_wchar_p(self.id_data.name), ctypes.c_wchar_p(self.name), self.f_getPyObject());
		
	def f_update(self, 是否向下传递=False, input插座=None):
		编号 = self.inputs['编号'].f_getData()
		编号 = str(编号)
		
		path = self.m_路径文本 + self.m_文件名称前 + 编号 + self.m_文件名称后
		self.outputs['路径'].f_setData(path)
		
		
class C_NODE_AddMenu_序列名称(bpy.types.Operator):
	bl_idname = 'node.global_node_sequence_name_text'
	bl_label = '序列名称'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		operator.use_transform = True
		bpy.ops.node.add_node(type='C_Node_序列名称', use_transform=True)
		return {'FINISHED'}






classes = (
	C_SceneNode_文本物体,
	C_NODE_AddMenu_文本物体,

	C_Node_序列名称,
	C_NODE_AddMenu_序列名称,

)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)

	

